package com.strive.demo.web.listener;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.strive.demo.web.model.ShopExcel;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @description:
 * @author: bingcun.chen
 * @Date: 2022/3/22 14:18
 * @Version 1.0
 */
public class StringExcelListener extends AnalysisEventListener<ShopExcel> {
    /**
     * 自定义用于暂时存储data
     * 可以通过实例获取该值
     */
    private List<ShopExcel> datas = new ArrayList<>();

    /**
     * 每解析一行都会回调invoke()方法
     *
     * @param shopExcel  读取后的数据对象
     * @param context 内容
     */
    @Override
    public void invoke(ShopExcel shopExcel, AnalysisContext context) {
        //数据存储到list，供批量处理，或后续自己业务逻辑处理。
        List<ShopExcel> excelList = new ArrayList<>();
        excelList.add(shopExcel);
        if(excelList.size() > 3000){
            saveData(excelList);
            excelList.clear();
        }
    }

    @Transactional
    public void saveData(List<ShopExcel> excelList) {

        //直接批量插入

    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        //解析结束销毁不用的资源
        //注意不要调用datas.clear(),否则getDatas为null
        saveData(datas);
    }
}
